#ifndef __H_STRUCT_DEFINE__
#define __H_STRUCT_DEFINE__

/**
	Shader input/output define.
*/

struct VSI_NORMAL
{
	float3 position : POSITION;
	float3 normal : NORMAL;
	float2 texCoord : TEXCOORD0;
};

struct VSI_SKIN
{
	float3 position : POSITION;
	float3 normal : NORMAL;
	float2 texCoord : TEXCOORD0;
	float4 index : TEXCOORD1;
	float4 weight : TEXCOORD2;
};

struct VSI_SHADOW
{
	float3 position : POSITION;
	float2 texCoord : TEXCOORD0;
};

struct VSO
{
	float4 position : POSITION;
	float4 color : COLOR0;
	float2 texCoord : TEXCOORD0;
};

struct VSO_PUV
{
	float4 position : POSITION;
	float4 color : COLOR0;
	float2 texCoord : TEXCOORD0;
	float4 texProj : TEXCOORD1;
};

struct VSO_FOG
{
	float4 position : POSITION;
	float4 color : COLOR0;
	float2 texCoord : TEXCOORD0;
	float fog : TEXCOORD1;
};

struct VSO_PUV_FOG
{
	float4 position : POSITION;
	float4 color : COLOR0;
	float2 texCoord : TEXCOORD0;
	float4 texProj : TEXCOORD1;
	float fog : TEXCOORD2;
};

struct VSO_SHADOW
{
	float4 position : POSITION;
	float2 depth : TEXCOORD0;
};

// terrain struct define.
struct VSO_TERRAIN
{
	float4 position : POSITION;
	float4 diffuse : COLOR0;
	float3 normal : TEXCOORD0;
	float2 texCoord : TEXCOORD1;
	float3 lookDir : TEXCOORD2;
};

struct VSO_TERRAIN_PUV
{
	float4 position : POSITION;
	float4 diffuse : COLOR0;
	float3 normal : TEXCOORD0;
	float2 texCoord : TEXCOORD1;    
	float3 lookDir : TEXCOORD2;
	float4 texProj : TEXCOORD3;
};

struct VSO_TERRAIN_FOG
{
	float4 position : POSITION;
	float4 diffuse : COLOR0;
	float3 normal : TEXCOORD0;
	float2 texCoord : TEXCOORD1;
	float3 lookDir : TEXCOORD2;
	float fog : TEXCOORD3;
};

struct VSO_TERRAIN_PUV_FOG
{
	float4 position : POSITION;
	float4 diffuse : COLOR0;
	float3 normal : TEXCOORD0;
	float2 texCoord : TEXCOORD1;    
	float3 lookDir : TEXCOORD2;
	float4 texProj : TEXCOORD3;
	float fog : TEXCOORD4;
};

struct PSO
{
	float4 color : COLOR0;
};

#endif // __H_STRUCT_DEFINE__
